using rbac.contracts.Dto.Input;
using rbac.contracts.Dto.Output;
using rbac.contracts.Interface;
using rbac.domain.Interface;

namespace rbac.services;

public class RolePermissionService:ServiceBase, IRolePermissionService
{
    private readonly IRolePermissionRepository _rolePermissionRepository;

    public RolePermissionService(IRolePermissionRepository rolePermissionRepository)
    {
        _rolePermissionRepository = rolePermissionRepository;
    }

    public int DistributeRolePermission(DistributeRolePermissionsInput input)
    {
        return _rolePermissionRepository.DistributeRolePermission(input.RoleId, input.PermissionList);
    }

    public List<PermissionDto> GetPermissionByRoleId(int roleId)
    {
        // 获取权限列表
        var permissions = _rolePermissionRepository.GetPermissionByRoleId(roleId);

        List<PermissionDto> result = new();
        
        foreach (var permission in permissions.Where(p=>p.ParentId ==0))
        {
            var dto = _mapper.Map<PermissionDto>(permission);
            
            // 获取子菜单
            var child = permissions.Where(p=>p.ParentId == permission.Id);
            if (child.Any()) // 判断是否有数据
            {
                dto.Child = _mapper.Map<List<PermissionDto>>(child);
            }

            result.Add(dto);
        }


        return result;










        // // 获取权限列表(实体)
        // var permissions = _rolePermissionRepository.GetPermissionByRoleId(roleId);
        //
        // List<PermissionDto> result = new();
        //
        // foreach (var permission in permissions)
        // {
        //     var dto = _mapper.Map<PermissionDto>(permissions);
        //     // 获取权限子菜单
        //     var child = permissions.Where(p => p.ParentId == permission.Id).ToList();
        //     if (child.Any())
        //     {
        //         dto.Child = _mapper.Map<List<PermissionDto>>(child);
        //     }
        //     
        //     result.Add(dto);
        // }
        //
        // return result;
    }
}